{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "\n",
    "X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=666)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/wdat4CV4QLMOgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b48def0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y==0,0], X[y==0,1])\n",
    "plt.scatter(X[y==1,0], X[y==1,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=500, n_jobs=-1,\n",
       "            oob_score=True, random_state=666, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "\n",
    "rf_clf = RandomForestClassifier(n_estimators=500, oob_score=True, random_state=666, n_jobs=-1)\n",
    "rf_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.89200000000000002"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_clf.oob_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.90600000000000003"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf_clf2 = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, oob_score=True, random_state=666, n_jobs=-1)\n",
    "rf_clf2.fit(X, y)\n",
    "rf_clf2.oob_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "随机森林拥有决策树和BaggingClassifier的所有参数：）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Extra-Trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ExtraTreesClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
       "           max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "           min_samples_leaf=1, min_samples_split=2,\n",
       "           min_weight_fraction_leaf=0.0, n_estimators=500, n_jobs=-1,\n",
       "           oob_score=True, random_state=666, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import ExtraTreesClassifier\n",
    "\n",
    "et_clf = ExtraTreesClassifier(n_estimators=500, bootstrap=True, oob_score=True, random_state=666, n_jobs=-1)\n",
    "et_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.89200000000000002"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "et_clf.oob_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 集成学习解决回归问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import BaggingRegressor\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.ensemble import ExtraTreesRegressor"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
